/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 *    2010 year
 *    Author: Michael Khromov aka MikeDM (Mike D'Morto)
 *    E-Mail: mikedmorto@gmail.com
 */
#ifndef DLOGINSTDMNG_H
#define DLOGINSTDMNG_H

#include <QDialog>
#include <QKeyEvent>
#include <QModelIndex>
#include "def.h"



namespace Ui {
    class DLoginStdMng;
}

class DLoginStdMng : public QDialog
{
    Q_OBJECT

public:
    explicit DLoginStdMng(bool mode, const QString & curruser,QWidget *parent = 0);
    bool dstart();
    ~DLoginStdMng();
    // пользовательский режим
    // метод который говорит диалогу о том что не прошла валидация текущего пароля
    // пользователя в режиме пользователя
    void setValidationErrorU();
    // и ошибка этого запроса
    void setValidationErrorUE(const QString & errortext);
    // отдаем новый пароль
    QString getNewPass();
    // пароль сменился удачно
    void setChangePassOkU();
    // пароль неудалось сменить
    void setChangePassErrU(const QString & errortext);
    // административный режим
    // получаем список юзверей.
    void setGetAllUsersOkA(const QStringList & users);
    // а вот и ошибка получения списка юзверей
    void setGetAllUsersErrA(const QString & errtext);
    // пароль сменился удачно
    void setChangePassOkUA();
    // пароль неудалось сменить
    void setChangePassErrUA(const QString & errortext);


private:
    Ui::DLoginStdMng *ui;
    bool mode;
    enum State{ShowU=0,ValidPassErrU,QueryChangePassU,ValidCurrPassErrU,ChangePassErrU,
            GetAllA,GetAllErrA,ShowAll,ShowUA,ValidCurrPassErrUA,QueryChangePassUA,
            ChangePassErrUA,InfoUA};
    // этапы: показ основной закладки в режиме юзера, проверка новых паролей в режиме юзера непрошла
    // 3 запрос в базу, процедура смены пароля
    // 4 шаг - текущий пароль пользователя неверен
    // 5 шаг, это запрос всех пользователей.
    // 6 отображается ошибка при запросе всех пользователей в режиме админа
    // 7 отображается список юзеров, в режиме админа
    // 8 отображаем закладку смены пароля для выбранного юзера, режим админа
    // 9 валидация соответствия новых паролей неудачна.
    // 10 QueryChangePassUA - запрос в базу на смену пароля этому юзверю
    // ChangePassErrUA - вернулся отрицательный ответ о смене пароля
    // InfoUA - вернулся положительный ответ от базы, сигнализируем админу.
    int Step; // этап работы
    QString curruser;
    bool eventFilter(QObject *obj, QEvent *event);
    void userEdit(); // ловим пользователя которому надо сменить пароль


private slots:

    void slotAcceptCP();
    void slotBTN();
    void slotAll(QModelIndex);

    void reject();


signals:
    // режим юзера
    // запрос смены пароля пользователю
    void sigChangeUP(const QString & pass);
    // режим админа
    // запрос всех юзверей
    void sigGetAllUsers();
    // запрос смены пароля пользователю в режиме админа
    void sigChangeUPA(const QString & pass, const QString & user);

};

#endif // DLOGINSTDMNG_H
